|
![](/i/fill.gif) |
> I'm guessing (not knowing exactly how macros work) that
> when the objects are put into the first array the macros are
> executed and the results put in the array. Is there any way inside
> pov-ray to have the macros storred in the array and only executed
> when the objects are written out?
You guessed well. Why don't you just write as foolows:
#declare rnd=seed(1328);
#declare Land=height_field{ /* anything here */ }
#macro Object1()
sphere {0,0.1
#if (rand(rnd)>0.5)
pigment {rgb <1,0,0>}
#else
pigment {rgb <0,0,1>}
#end
}
#end
#macro Object2()
box {<-0.1,0,-0.1>,<0.1,0.1,0.1> pigment {rgb rand(rnd)}}
#end
#declare LotsOfObjects=array[1000]
#declare i=0;
#declare rnd2=seed(783);
#while (i<1000)
#if (rand(rnd2)<0.5)
#declare LotsOfObjects[i]=Object1()
#else
#declare LotsOfObjects[i]=Object2()
#end
#declare i=i+1;
#end
#declare i=0;
#declare rnd2=seed(8452);
union {
#while (i<1000)
#declare Pos=<rand(rnd2),100,rand(rnd2)>;
object {LotsOfObjects[i] translate trace(Land,Pos,-y)}
#declare i=i+1;
#end
}
Post a reply to this message
|
![](/i/fill.gif) |